package net.guerlab.sdk.anubis.entity;

import java.math.BigDecimal;
import java.util.List;

import com.fasterxml.jackson.annotation.JsonProperty;

/**
 * 订单信息
 * 
 * @author guer
 *
 */
public class AnubisOrderQueryInfo {

    /**
     * 微仓ID
     */
    @JsonProperty("transport_station_id")
    private int transportStationId;

    /**
     * 微仓电话
     */
    @JsonProperty("transport_station_tel")
    private String transportStationTel;

    /**
     * 配送员ID
     */
    @JsonProperty("carrier_driver_id")
    private String carrierDriverId;

    /**
     * 配送员姓名
     */
    @JsonProperty("carrier_driver_name")
    private String carrierDriverName;

    /**
     * 配送员电话
     */
    @JsonProperty("carrier_driver_phone")
    private String carrierDriverPhone;

    /**
     * 预计送达时间（毫秒）
     */
    @JsonProperty("estimate_arrive_time")
    private long estimateArriveTime;

    /**
     * 配送费
     */
    @JsonProperty("order_total_delivery_cost")
    private BigDecimal orderTotalDeliveryCost;

    /**
     * 配送费折扣
     */
    @JsonProperty("order_total_delivery_discount")
    private BigDecimal orderTotalDeliveryDiscount;

    /**
     * 订单状态
     */
    @JsonProperty("order_status")
    private int orderStatus;

    /**
     * 运单异常原因code
     */
    @JsonProperty("abnormal_code")
    private String abnormalCode;

    /**
     * 运单异常原因描述
     */
    @JsonProperty("abnormal_desc")
    private String abnormalDesc;

    /**
     * 时间记录列表
     */
    @JsonProperty("event_log_details")
    private List<EventLogInfo> eventLogDetails;

    @Override
    public String toString() {
        StringBuilder builder = new StringBuilder();
        builder.append("AnubisOrderInfo [transportStationId=");
        builder.append(transportStationId);
        builder.append(", transportStationTel=");
        builder.append(transportStationTel);
        builder.append(", carrierDriverId=");
        builder.append(carrierDriverId);
        builder.append(", carrierDriverName=");
        builder.append(carrierDriverName);
        builder.append(", carrierDriverPhone=");
        builder.append(carrierDriverPhone);
        builder.append(", estimateArriveTime=");
        builder.append(estimateArriveTime);
        builder.append(", orderTotalDeliveryCost=");
        builder.append(orderTotalDeliveryCost);
        builder.append(", orderTotalDeliveryDiscount=");
        builder.append(orderTotalDeliveryDiscount);
        builder.append(", orderStatus=");
        builder.append(orderStatus);
        builder.append(", abnormalCode=");
        builder.append(abnormalCode);
        builder.append(", abnormalDesc=");
        builder.append(abnormalDesc);
        builder.append(", eventLogDetails=");
        builder.append(eventLogDetails);
        builder.append("]");
        return builder.toString();
    }

    /**
     * 返回 微仓ID
     *
     * @return 微仓ID
     */
    public int getTransportStationId() {
        return transportStationId;
    }

    /**
     * 设置微仓ID
     *
     * @param transportStationId
     *            微仓ID
     */
    public void setTransportStationId(
            int transportStationId) {
        this.transportStationId = transportStationId;
    }

    /**
     * 返回 微仓电话
     *
     * @return 微仓电话
     */
    public String getTransportStationTel() {
        return transportStationTel;
    }

    /**
     * 设置微仓电话
     *
     * @param transportStationTel
     *            微仓电话
     */
    public void setTransportStationTel(
            String transportStationTel) {
        this.transportStationTel = transportStationTel;
    }

    /**
     * 返回 配送员ID
     *
     * @return 配送员ID
     */
    public String getCarrierDriverId() {
        return carrierDriverId;
    }

    /**
     * 设置配送员ID
     *
     * @param carrierDriverId
     *            配送员ID
     */
    public void setCarrierDriverId(
            String carrierDriverId) {
        this.carrierDriverId = carrierDriverId;
    }

    /**
     * 返回 配送员姓名
     *
     * @return 配送员姓名
     */
    public String getCarrierDriverName() {
        return carrierDriverName;
    }

    /**
     * 设置配送员姓名
     *
     * @param carrierDriverName
     *            配送员姓名
     */
    public void setCarrierDriverName(
            String carrierDriverName) {
        this.carrierDriverName = carrierDriverName;
    }

    /**
     * 返回 配送员电话
     *
     * @return 配送员电话
     */
    public String getCarrierDriverPhone() {
        return carrierDriverPhone;
    }

    /**
     * 设置配送员电话
     *
     * @param carrierDriverPhone
     *            配送员电话
     */
    public void setCarrierDriverPhone(
            String carrierDriverPhone) {
        this.carrierDriverPhone = carrierDriverPhone;
    }

    /**
     * 返回 预计送达时间（毫秒）
     *
     * @return 预计送达时间
     */
    public long getEstimateArriveTime() {
        return estimateArriveTime;
    }

    /**
     * 设置预计送达时间（毫秒）
     *
     * @param estimateArriveTime
     *            预计送达时间
     */
    public void setEstimateArriveTime(
            long estimateArriveTime) {
        this.estimateArriveTime = estimateArriveTime;
    }

    /**
     * 返回 配送费
     *
     * @return 配送费
     */
    public BigDecimal getOrderTotalDeliveryCost() {
        return orderTotalDeliveryCost;
    }

    /**
     * 设置配送费
     *
     * @param orderTotalDeliveryCost
     *            配送费
     */
    public void setOrderTotalDeliveryCost(
            BigDecimal orderTotalDeliveryCost) {
        this.orderTotalDeliveryCost = orderTotalDeliveryCost;
    }

    /**
     * 返回 配送费折扣
     *
     * @return 配送费折扣
     */
    public BigDecimal getOrderTotalDeliveryDiscount() {
        return orderTotalDeliveryDiscount;
    }

    /**
     * 设置配送费折扣
     *
     * @param orderTotalDeliveryDiscount
     *            配送费折扣
     */
    public void setOrderTotalDeliveryDiscount(
            BigDecimal orderTotalDeliveryDiscount) {
        this.orderTotalDeliveryDiscount = orderTotalDeliveryDiscount;
    }

    /**
     * 返回 订单状态 <br>
     * <table border> <caption><b>订单状态列表</b></caption>
     * <tr>
     * <th>状态码</th>
     * <th>说明</th>
     * <th>描述</th>
     * </tr>
     * <tr>
     * <td>1</td>
     * <td>系统已接单</td>
     * <td>蜂鸟配送开放平台接单后,商户接收到系统已接单状态, 支持取消</td>
     * </tr>
     * <tr>
     * <td>20</td>
     * <td>已分配骑手</td>
     * <td>蜂鸟配送开放平台接单后,商户接收到已分配骑手状态, 支持取消</td>
     * </tr>
     * <tr>
     * <td>80</td>
     * <td>骑手已到店</td>
     * <td>蜂鸟配送开放平台将骑手已到店状态回调给商户, 支持取消</td>
     * </tr>
     * <tr>
     * <td>2</td>
     * <td>配送中</td>
     * <td>蜂鸟配送开放平台将骑手配送中状态回调给商户, 不支持取消</td>
     * </tr>
     * <tr>
     * <td>3</td>
     * <td>已送达</td>
     * <td>蜂鸟配送开放平台将已送达状态回调给商户, 不支持取消</td>
     * </tr>
     * <tr>
     * <td>4</td>
     * <td>已取消(同步取消不需要关注此状态)</td>
     * <td>商户主动取消订单请求处理成功后,蜂鸟配送开放平台将已取消状态回调给商户</td>
     * </tr>
     * <tr>
     * <td>5</td>
     * <td>异常</td>
     * <td>推单到物流开放平台后任何阶段产生异常,蜂鸟配送开放平台将异常状态回调给商户</td>
     * </tr>
     * </table>
     *
     * @return 订单状态
     */
    public int getOrderStatus() {
        return orderStatus;
    }

    /**
     * 设置订单状态 <br>
     * <table border> <caption><b>订单状态列表</b></caption>
     * <tr>
     * <th>状态码</th>
     * <th>说明</th>
     * <th>描述</th>
     * </tr>
     * <tr>
     * <td>1</td>
     * <td>系统已接单</td>
     * <td>蜂鸟配送开放平台接单后,商户接收到系统已接单状态, 支持取消</td>
     * </tr>
     * <tr>
     * <td>20</td>
     * <td>已分配骑手</td>
     * <td>蜂鸟配送开放平台接单后,商户接收到已分配骑手状态, 支持取消</td>
     * </tr>
     * <tr>
     * <td>80</td>
     * <td>骑手已到店</td>
     * <td>蜂鸟配送开放平台将骑手已到店状态回调给商户, 支持取消</td>
     * </tr>
     * <tr>
     * <td>2</td>
     * <td>配送中</td>
     * <td>蜂鸟配送开放平台将骑手配送中状态回调给商户, 不支持取消</td>
     * </tr>
     * <tr>
     * <td>3</td>
     * <td>已送达</td>
     * <td>蜂鸟配送开放平台将已送达状态回调给商户, 不支持取消</td>
     * </tr>
     * <tr>
     * <td>4</td>
     * <td>已取消(同步取消不需要关注此状态)</td>
     * <td>商户主动取消订单请求处理成功后,蜂鸟配送开放平台将已取消状态回调给商户</td>
     * </tr>
     * <tr>
     * <td>5</td>
     * <td>异常</td>
     * <td>推单到物流开放平台后任何阶段产生异常,蜂鸟配送开放平台将异常状态回调给商户</td>
     * </tr>
     * </table>
     *
     * @param orderStatus
     *            订单状态
     */
    public void setOrderStatus(
            int orderStatus) {
        this.orderStatus = orderStatus;
    }

    /**
     * 返回 运单异常原因code
     *
     * @return 运单异常原因code
     */
    public String getAbnormalCode() {
        return abnormalCode;
    }

    /**
     * 设置运单异常原因code
     *
     * @param abnormalCode
     *            运单异常原因code
     */
    public void setAbnormalCode(
            String abnormalCode) {
        this.abnormalCode = abnormalCode;
    }

    /**
     * 返回 运单异常原因描述
     *
     * @return 运单异常原因描述
     */
    public String getAbnormalDesc() {
        return abnormalDesc;
    }

    /**
     * 设置运单异常原因描述
     *
     * @param abnormalDesc
     *            运单异常原因描述
     */
    public void setAbnormalDesc(
            String abnormalDesc) {
        this.abnormalDesc = abnormalDesc;
    }

    /**
     * 返回 时间记录列表
     *
     * @return 时间记录列表
     */
    public List<EventLogInfo> getEventLogDetails() {
        return eventLogDetails;
    }

    /**
     * 设置时间记录列表
     *
     * @param eventLogDetails
     *            时间记录列表
     */
    public void setEventLogDetails(
            List<EventLogInfo> eventLogDetails) {
        this.eventLogDetails = eventLogDetails;
    }

}
